﻿/*!
 * 定义模块 Management (日历管理) 中所有功能的服务 API。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

/*
 * @param {Object} $    jQuery 命名空间。
 * @param {Object} $$   pittypat 命名空间。
 * @param {Object} _mod 模块 Management (日历管理) 的命名空间。
 * 
 * 更多说明请参见：
 * https://www.pittypat.work/com/waln/pittypat/coding/help/_api.js.html。
 */
(function ($, $$, _mod) {
	'use strict';

	// 模块的 API 和 UI 命名空间
	var _api = _mod.api = _mod.api || {};

	/*
	 * 功能 Dates (月份日期列表) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 年份
	 *     // 要返回的日期所在的年份。
	 *     year: {int16?},
	 * 
	 *     // 月份
	 *     // 要返回的日期所在的月份，从 1 到 12。
	 *     month: {int8?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 日期列表
	 * // 目标年份和月份中的所有日期的列表。该列表仅仅返回管理人员已经定义的日期，没有定义的日期不会出现在列表中。在一个日历界面上，除了会显示当前月份的日期外，通常还会显示上一个月的最后几天，以及下一个月的前面几天，因此返回的列表包含了上一个月、本月以及下一个月的所有已经定义的日期。
	 * list: [{
	 *     // 日期值
	 *     // 目标日期的值。
	 *     value: {date?},
	 * 
	 *     // 是否工作日
	 *     // 指示目标日期是否是一个工作日：true-是工作日，false-是节假日。
	 *     isWorkday: {bool?},
	 * 
	 *     // 节日名称
	 *     // 日期对应的节日的名称。
	 *     festivals: {string?} 
	 * }, ...]
	 */
	_api.dates = $$.api({
		// 请求路径
		url: '~/waln/calendar/management/dates',

		// 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
		method: 'POST',

		// 对 args 进行验证
		validate: function (e) {
			if (!e.args) {
				e.message = '没有提供任何参数。';
				return;
			}

			// 验证 year (年份)
			if (!$$.util.is.int(e.args.year, 1900, 9999)) {
				e.message = '没有提供有效的年份。';
				return;
			}

			// 验证 month (月份)
			if (!$$.util.is.int(e.args.month, 1, 12)) {
				e.message = '没有提供有效的月份。';
				return;
			}

			// 空字符串表示通过验证
			e.message = '';
		},

		// 发送给服务器的数据
		data: function (e) {
			e.data = e.args;
		}
	});

	/*
	 * 功能 SetWorkday (设置工作日) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 日期值
	 *     // 要设置的目标日期。
	 *     value: {date?},
	 * 
	 *     // 是否工作日
	 *     // 指示要将目标日期设置为工作日还是节假日。true 表示设置为工作日，false 表示设置为节假日，如果设置为空，则意味着使用规则计算工作日或节假日：周一到周五为工作日，周六和周日为节假日。
	 *     isWorkday: {bool?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 日期信息
	 * // 新创建的或已经修改的日期信息。
	 * date: {
	 *     // 日期值
	 *     // 目标日期的值。
	 *     value: {date?},
	 * 
	 *     // 是否工作日
	 *     // 指示目标日期是否是一个工作日：true-是工作日，false-是节假日。
	 *     isWorkday: {bool?},
	 * 
	 *     // 节日名称
	 *     // 日期对应的节日的名称。
	 *     festivals: {string?} 
	 * }
	 */
	_api.setWorkday = $$.api({
		// 请求路径
		url: '~/waln/calendar/management/setworkday',

		// 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
		method: 'POST',

		// 对 args 进行验证
		validate: function (e) {
			if (!e.args) {
				e.message = '没有提供任何参数。';
				return;
			}

			// 验证 value (日期值)
			if (!$$.util.is.datetime(e.args.value, '2000/01/01', '3000/01/01')) {
				e.message = '没有提供有效的日期值。';
				return;
			}

			// 验证 isWorkday (是否工作日)
			if (!$$.util.is.bool(e.args.isWorkday)) {
				e.message = '没有提供有效的是否工作日。';
				return;
			}

			// 空字符串表示通过验证
			e.message = '';
		},

		// 发送给服务器的数据
		data: function (e) {
			e.data = e.args;
		}
	});

	/*
	 * 功能 SetFestivals (设置节日) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 日期值
	 *     // 要设置其节日名称的目标日期。
	 *     value: {date?},
	 * 
	 *     // 节日名称
	 *     // 日期对应的节日的名称，可以是多个节日，多个节日之间通常使用逗号、分号等进行分隔。
	 *     festivals: {string(50)?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 日期信息
	 * // 新创建的或已经修改的日期信息。
	 * date: {
	 *     // 日期值
	 *     // 目标日期的值。
	 *     value: {date?},
	 * 
	 *     // 是否工作日
	 *     // 指示目标日期是否是一个工作日：true-是工作日，false-是节假日。
	 *     isWorkday: {bool?},
	 * 
	 *     // 节日名称
	 *     // 日期对应的节日的名称。
	 *     festivals: {string?} 
	 * }
	 */
	_api.setFestivals = $$.api({
		// 请求路径
		url: '~/waln/calendar/management/setfestivals',

		// 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
		method: 'POST',

		// 对 args 进行验证
		validate: function (e) {
			if (!e.args) {
				e.message = '没有提供任何参数。';
				return;
			}

			// 验证 value (日期值)
			if (!$$.util.is.datetime(e.args.value, '2000/01/01', '3000/01/01')) {
				e.message = '没有提供有效的日期值。';
				return;
			}

			// 空字符串表示通过验证
			e.message = '';
		},

		// 发送给服务器的数据
		data: function (e) {
			e.data = e.args;
		}
	});
})(jQuery, pittypat, pittypat.namespace('waln.calendar.management'));
